package com.itheima.userservice.rabbitmq;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue queue() {
        //这样也可以指定私信交换机和路由key
//        QueueBuilder durable = QueueBuilder.durable("2");
//        durable.deadLetterRoutingKey()
//                .deadLetterRoutingKey()

        Map<String, Object> args = new HashMap<>();
        // 队列消息过期时间
        args.put("x-message-ttl", 1000);
        // 设置死信交换机名字
        args.put("x-dead-letter-exchange", "user_dead_exchange");
        //设置死信交换机路由
        args.put("x-dead-letter-routing-key", "dead");

        //name 名字  durable 是否持久化  exclusive 是否排他  autoDealete 是否自动删除
        return new Queue("user_queue_001", true, false, false,args);
    }

    @Bean
    public TopicExchange topicExchange() {
        //name 名字  durable 是否持久化  autoDelet是否自动删除
        return new TopicExchange("user_exchange_001", true, false);
    }

    @Bean
    public Binding binding01() {
        return BindingBuilder.bind(queue()).to(topicExchange()).with("cn.#");
    }

//    //正常队列
//    @Bean
//    public Queue normalQueue(){
//        Map<String,Object> config=new HashMap<>();
//        //过期时间
//        config.put("x-message-ttl", 10000);//message在该队列queue的存活时间最大为10秒
//        //死信交换机
//        config.put("x-dead-letter-exchange", "deadExchange"); //x-dead-letter-exchange参数是设置该队列的死信交换器（DLX）
//        //死信routingkey
//        config.put("x-dead-letter-routing-key", "deadQueue");//x-dead-letter-routing-key参数是给这个DLX指定路由键
//
//        return new Queue("normalQueue",true,false,false,config);
//    }
//
    //死信队列
    @Bean
    public Queue daadQueue(){

        return new Queue("user_dead_queue",true);
    }

//    //正常交换机
//    @Bean
//    public TopicExchange normalExchange(){
//        return  new TopicExchange("directExchange",true,false);
//    }
//
    //死信交换机
    @Bean
    public TopicExchange deadExchange(){
        return  new TopicExchange("user_dead_exchange");
    }
//
//    //正常绑定
//    @Bean
//    public Binding normalBinding(){
//        return  BindingBuilder.bind(normalQueue()).to(normalExchange()).with("live");
//    }
//
    //死信绑定
    @Bean
    public Binding deadBinding(){
        return  BindingBuilder.bind(daadQueue()).to(deadExchange()).with("dead");
    }

//    //失败交换机
//    @Bean
//    public DirectExchange errorMessageExchange(){
//        return new DirectExchange("error.direvt");
//    }
//    //失败队列
//    @Bean
//    public Queue errorQueue(){
//        return new Queue("error.queue",true);
//    }
//    //定义失败策略绑定
//    @Bean
//    public MessageRecoverer republishMessageRecoverer(RabbitTemplate rabbitTemplate){
//        return new RepublishMessageRecoverer(rabbitTemplate,"error.direvt","error");
//    }
}